package com.jamie.annotation.code;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 标注课程信息注解
 * <p>
 * Target(指定注解属性类型，可以作用的范围):
 * TYPE                类、接口（包括注释类型）或枚举声明
 * FIELD               字段声明（包括枚举常量）
 * METHOD              方法声明
 * PARAMETER           参数声明
 * CONSTRUCTOR         构造方法声明
 * LOCAL_VARIABLE      局部变量声明
 * ANNOTATION_TYPE     注释类型声明
 * PACKAGE             包声明
 *
 * Retention(标识这个注解怎么保存):
 * SOURCE             Annotation信息仅存在于编译器处理期间，编译器处理完之后就没有该Annotation信息了
 * CLASS              编译器将Annotation存储于类对应的.class文件中。默认行为
 * RUNTIME            编译器将Annotation存储于class文件中，并且可由JVM读入
 *
 * </p>
 * @author jamrie
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface CourseInfoAnnotation {

    /** 课程名称 */
    String courseName();

    /** 课程标签 */
    String courseTag();

    /** 课程简介 */
    String courseProfile();

    /** 课程序号 */
    int courseIndex() default 303;

}
